package com.app.myApp.utils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys; // 导入 Keys 工具类
import org.springframework.stereotype.Component;

import javax.crypto.SecretKey; // 导入 SecretKey
import java.util.Date;

@Component
public class JwtUtils {

    // 1. 自动生成 HS256 标准的 256 位密钥（32 字节）
    private final SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);

    // 2. Token 过期时间（2小时，单位：毫秒）
    private final long expiration = 7200000; //

    // 生成 Token（使用 SecretKey 签名，而非字符串）
    public String generateToken(String email) {
        Date now = new Date();
        Date expireDate = new Date(now.getTime() + expiration);

        return Jwts.builder()
                .setSubject(email) // 存储用户唯一标识
                .setIssuedAt(now) // 生成时间
                .setExpiration(expireDate) // 过期时间
                .signWith(secretKey) // 用合规的 SecretKey 签名（关键修改）
                .compact();
    }

    // 从 Token 解析用户 email（使用同一个 SecretKey 验证）
    public String getEmailFromToken(String token) {
        Claims claims = Jwts.parserBuilder() // 注意：改用 parserBuilder()
                .setSigningKey(secretKey) // 用 SecretKey 验证签名
                .build()
                .parseClaimsJws(token)
                .getBody();
        return claims.getSubject();
    }

    // 验证 Token 有效性（同上，用 SecretKey 验证）
    public boolean validateToken(String token) {
        try {
            Jwts.parserBuilder()
                    .setSigningKey(secretKey)
                    .build()
                    .parseClaimsJws(token);
            return true;
        } catch (ExpiredJwtException | UnsupportedJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
            return false;
        }
    }
}